From d6d4e71ec24fa77394ce76492490622b80092a07 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 14 Sep 2017 20:02:08 +0200 Subject: [PATCH] cargo_compile: iterate packages once, not three times --- src/cargo/ops/cargo_compile.rs | 15 +++++---------- src/cargo/ops/cargo_doc.rs | 12 ++++++------ 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 6717e3098..88309fdfa 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -231,21 +231,16 @@ pub fn compile_ws<'a>(ws: &Workspace<'a>, &specs)?; let (packages, resolve_with_overrides) = resolve; - let mut pkgids = Vec::new(); - if specs.len() > 0 { - for p in specs.iter() { - pkgids.push(p.query(resolve_with_overrides.iter())?); - } - } else { + if specs.is_empty() { return Err(format!("manifest path `{}` contains no package: The manifest is virtual, \ and the workspace has no members.", ws.current_manifest().display()).into()); }; - let to_builds = pkgids.iter().map(|id| { - packages.get(id) - }).collect::>>()?; - for p in to_builds.iter() { + let mut to_builds = Vec::new(); + for p in specs.iter() { + let p = packages.get(p.query(resolve_with_overrides.iter())?)?; p.manifest().print_teapot(ws.config()); + to_builds.push(p); } let mut general_targets = Vec::new(); diff --git a/src/cargo/ops/cargo_doc.rs b/src/cargo/ops/cargo_doc.rs index 4d8c8797b..0181a0c44 100644 --- a/src/cargo/ops/cargo_doc.rs +++ b/src/cargo/ops/cargo_doc.rs @@ -22,16 +22,16 @@ pub fn doc(ws: &Workspace, options: &DocOptions) -> CargoResult<()> { &specs)?; let (packages, resolve_with_overrides) = resolve; - let mut pkgs = Vec::new(); - if specs.len() > 0 { - for p in specs.iter() { - pkgs.push(packages.get(p.query(resolve_with_overrides.iter())?)?); - } - } else { + if specs.is_empty() { return Err(format!("manifest path `{}` contains no package: The manifest is virtual, \ and the workspace has no members.", ws.current_manifest().display()).into()); }; + let mut pkgs = Vec::new(); + for p in specs.iter() { + pkgs.push(packages.get(p.query(resolve_with_overrides.iter())?)?); + } + let mut lib_names = HashSet::new(); let mut bin_names = HashSet::new(); for package in &pkgs { -- 2.30.2